﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CuaHangMayTinh.Utilities;
using CuaHangMayTinh.DataProvider;
using CuaHangMayTinh.BusinessEntities;
using CuaHangMayTinh.DataAccessLayer;
using System.Data;

namespace CuaHangMayTinh.BusinessLogicLayer
{
    /// <summary>
    /// 
    /// </summary>
    public class LoaiMatHangManager
    {
        /// <summary>
        /// Tạo 1 đối tượng LoaiMatHangDA
        /// </summary>
        private static LoaiMatHangDA adapter = null;

        static LoaiMatHangManager()
        {
            if (adapter == null)
                adapter = new LoaiMatHangDA();
        }

        /// <summary>
        /// Hàm thêm 1 loại mặt hàng mới
        /// </summary>
        /// <param name="entity">LoaiMatHangEntity</param>
        /// <returns>0: Không thêm được, #0: Thêm được</returns>
        public static int Insert(LoaiMatHangEntity entity)
        {
            try
            {
                return adapter.Insert(entity);
            }
            catch (Exception ex)
            {
                Logger.Write(ex);
                return 0;
            }
        }

        /// <summary>
        /// Hàm thêm 1 loại mặt hàng mới, nếu sảy ra lỗi sẽ được thông báo
        /// </summary>
        /// <param name="entity">là 1 LoaiMatHangEntity cần được thêm vào CSDL</param>
        /// <param name="errormessage">trả về chuỗi thông báo lỗi nếu xảy ra</param>
        /// <returns> 0: không thêm được</returns>
        /// <returns> #0: thêm được</returns>
        public static int Insert(LoaiMatHangEntity entity, ref string errormessage)
        {
            try
            {
                return adapter.Insert(entity);
            }
            catch (Exception ex)
            {
                errormessage = ex.Message;
                Logger.Write(ex);
                return 0;
            }
        }

        /// <summary>
        /// Hàm thêm 1 loại mặt hàng mới và lấy được ID của loại mặt hàng trong CSDL    
        /// </summary>
        /// <param name="entity">là 1 LoaiMatHangEntity cần được thêm vào CSDL</param>
        /// <returns>0: không thêm được</returns>
        /// <returns>>0: trả về ID của loại mặt hàng</returns>
        public static int InsertGetID(LoaiMatHangEntity entity)
        {
            try
            {
                return adapter.InsertGetID(entity);
            }
            catch (Exception ex)
            {
                Logger.Write(ex);
                return 0;
            }
        }

        /// <summary>
        /// Hàm thêm 1 loại mặt hàng mới và lấy được ID của loại mặt hàng trong CSDL, nếu xảy ra lỗi sẽ được thông báo
        /// </summary>
        /// <param name="entity">là 1 LoaiMatHangEntity cần được thêm vào CSDL</param>
        /// <param name="errormessage">trả về chuỗi thông báo nếu lỗi xảy ra</param>
        /// <returns>0: không thêm được</returns>
        /// <returns> >0: ID của loại mặt hàng</returns>
        public static int InsertGetID(LoaiMatHangEntity entity, ref string errormessage)
        {
            try
            {
                return adapter.InsertGetID(entity);
            }
            catch (Exception ex)
            {
                errormessage = ex.Message;
                Logger.Write(ex);
                return 0;
            }
        }

        /// <summary>
        /// Hàm cập nhật thông tin của 1 loại mặt hàng
        /// </summary>
        /// <param name="entity">LoaiMatHangEntity</param>
        /// <returns>true: Thành công, false: Thất bại</returns>
        public static bool UpDate(LoaiMatHangEntity entity)
        {
            try
            {
                return adapter.UpDate(entity);
            }
            catch (Exception ex)
            {
                Logger.Write(ex);
                return false;
            }
        }

        /// <summary>
        /// Hàm cập nhật thông tin của 1 loại mặt hàng, nếu xảy ra lỗi sẽ được thông báo
        /// </summary>
        /// <param name="entity">LoaiMatHangEntity</param>
        /// <param name="errormessage">trả về chuỗi thông báo nếu xảy ra lỗi</param>
        /// <returns>true: Thành công, false: Thất bại</returns>
        public static bool UpDate(LoaiMatHangEntity entity, ref string errormessage)
        {
            try
            {
                return adapter.UpDate(entity);
            }
            catch (Exception ex)
            {
                errormessage = ex.Message;
                Logger.Write(ex);
                return false;
            }
        }

        /// <summary>
        /// Hàm cập nhật tình trạng của 1 loại mặt hàng
        /// </summary>
        /// <param name="entity">LoaiMatHangEntity</param>
        /// <returns>true: Thành công, false: Thất bại</returns>
        public static bool Update_TinhTrang(int maloai, bool tinhtrang)
        {
            try
            {
                return adapter.Update_TinhTrang(maloai, tinhtrang);
            }
            catch (Exception ex)
            {
                Logger.Write(ex);
                return false;
            }
        }

        /// <summary>
        /// Hàm cập nhật tình trạng của 1 loại mặt hàng, nếu lỗi xảy ra sẽ được thông báo
        /// </summary>
        /// <param name="maloai">mã của loại mặt hàng</param>
        /// <param name="tinhtrang">tình trạng của loại mặt hàng</param>
        /// <param name="errormessage">trả về chuỗi thông báo nếu xảy ra lỗi</param>
        /// <returns>true: Thành công, false: Thất bại</returns>
        public static bool Update_TinhTrang(int maloai, bool tinhtrang, ref string errormessage)
        {
            try
            {
                return adapter.Update_TinhTrang(maloai, tinhtrang);
            }
            catch (Exception ex)
            {
                errormessage = ex.Message;
                Logger.Write(ex);
                return false; ;
            }
        }

        /// <summary>
        /// Hàm lất tất cả thông tin về loại mặt hàng
        /// </summary>
        /// <returns>DataTable</returns>
        public static DataTable Find_All()
        {
            try
            {
                return adapter.Find_All();
            }
            catch (Exception ex)
            {
                Logger.Write(ex);
                return null;
            }
        }

        /// <summary>
        /// Hàm lất tất cả thông tin về loại mặt hàng, nếu xảy ra lỗi sẽ thông báo
        /// </summary>
        /// <param name="errormessage">trả về chuỗi thông báo nếu có lỗi xảy ra</param>
        /// <returns>Datatable</returns>
        public static DataTable Find_All(ref string errormessage)
        {
            try
            {
                return adapter.Find_All();
            }
            catch (Exception ex)
            {
                errormessage = ex.Message;
                Logger.Write(ex);
                return null;
            }
        }

        /// <summary>
        /// Hàm GetID của loại mặt hàng bằng tên của loại mặt hàng đó
        /// </summary>
        /// <param name="ten">tên loại mặt hàng cần lấy ID</param>
        /// <returns>0: Không tìm thấy, >0 ID của loại mặt hàng</returns>
        public static int GetID(string ten)
        {
            try
            {
                return adapter.GetID(ten);
            }
            catch (Exception ex)
            {
                Logger.Write(ex);
                return 0;
            }
        }

        /// <summary>
        /// Hàm GetID của loại mặt hàng bằng tên của loại mặt hàng đó, nếu có lỗi xảy ra sẽ thông báo
        /// </summary>
        /// <param name="ten">tên loại mặt hàng cần lấy ID</param>
        /// <param name="errormessage">trả về chuỗi thông báo nếu có lỗi xảy ra</param>
        /// <returns> 0: không tìm thấy, >0: ID của loại mặt hàng</returns>
        public static int GetID(string ten, ref string errormessage)
        {
            try
            {
                return adapter.GetID(ten);
            }
            catch (Exception ex)
            {
                errormessage = ex.Message;
                Logger.Write(ex);
                return 0;
            }
        }

        /// <summary>
        /// Hàm lấy tất cả thông tin của loại mặt hàng bằng tên của loại mặt hàng đó
        /// </summary>
        /// <param name="ten">tên loại mặt hàng cần lấy thông tin</param>
        /// <returns>DataTable</returns>
        /// 
        public static DataTable Find_Ten(string ten)
        {
            try
            {
                return adapter.Find_Ten(ten);
            }
            catch (Exception ex)
            {
                Logger.Write(ex);
                return null;
            }
        }

        /// <summary>
        /// Hàm lấy tất cả thông tin của loại mặt hàng bằng tên của loại mặt hàng đó, nếu có lỗi xảy ra sẽ thông báo
        /// </summary>
        /// <param name="ten">tên loại mặt hàng cần lấy thông tin</param>
        /// <param name="errormessage">trả về chuỗi thông báo nếu có lỗi xảy ra</param>
        /// <returns>Datatable</returns>
        public static DataTable Find_Ten(string ten, ref string errormessage)
        {
            try
            {
                return adapter.Find_Ten(ten);
            }
            catch (Exception ex)
            {
                errormessage = ex.Message;
                Logger.Write(ex);
                return null;
            }
        }

        /// <summary>
        /// Hàm lấy tất cả thông tin của loại mặt hàng bằng ID của loại mặt hàng đó
        /// </summary>
        /// <param name="id">ID loại mặt hàng cần lấy thông tin</param>
        /// <returns>DataTable</returns>
        public static DataTable Find_ID(int id)
        {
            try
            {
                return adapter.Find_ID(id);
            }
            catch (Exception ex)
            {
                Logger.Write(ex);
                return null;
            }
        }

        /// <summary>
        /// Hàm lấy tất cả thông tin của loại mặt hàng bằng ID của loại mặt hàng đó, nếu có lỗi xảy ra sẽ thông báo
        /// </summary>
        /// <param name="id">ID loại mặt hàng cần lấy thông tin</param>
        /// <param name="errormessage">trả về chuỗi thông báo nếu có lỗi</param>
        /// <returns>Datatable</returns>
        public static DataTable Find_ID(int id, ref string errormessage)
        {
            try
            {
                return adapter.Find_ID(id);
            }
            catch (Exception ex)
            {
                errormessage = ex.Message;
                Logger.Write(ex);
                return null;
            }
        }

        /// <summary>
        /// Hàm xoá loại mặt hàng theo ID
        /// </summary>
        /// <param name="id">ID của loại mặt hàng cần xoá</param>
        /// <returns>True: xoá thành công</returns>
        /// <returns>False: xoá thất bại</returns>
        public static bool Delete(int id)
        {
            try
            {
                return adapter.Delete(id);
            }
            catch (Exception ex)
            {
                Logger.Write(ex);
                return false;
            }
        }

        /// <summary>
        /// Hàm xoá loại mặt hàng theo ID, nếu có lỗi xảy ra sẽ thông báo
        /// </summary>
        /// <param name="id">ID của loại mặt hàng cần xoá</param>
        /// <param name="errormessage">trả về chuỗi thông báo nếu có lỗi xảy ra</param>
        /// <returns>True: xoá thành công</returns>
        /// <returns>False: xoá thất bại</returns>
        public static bool Delete(int id, ref string errormessage)
        {
            try
            {
                return adapter.Delete(id);
            }
            catch (Exception ex)
            {
                errormessage = ex.Message;
                Logger.Write(ex);
                return false;
            }
        }

        /// <summary>
        /// Hàm chuyển 1 datatable thành 1 list LoaiMatHangEntity
        /// </summary>
        /// <param name="dt">1 datatable chứa LoaiMatHangEntity</param>
        /// <returns>trả về 1 list LoaiMatHangEntity</returns>
        public static List<LoaiMatHangEntity> ConvertToList(DataTable dt)
        {
            try
            {
                return adapter.ConvertToList(dt);
            }
            catch (Exception ex)
            {
                Logger.Write(ex);
                return null;
            }
        }
    }
}
